package com.bjsxt;

import java.util.Scanner;

/**数据校验类
 * validate:证实  验证
 * scanner类 要在校验处写，不可以在主菜单类写，因为输入时可能不合法，而且用户
 * 反复输入，如果写在其它地方验证不方便  生成一个合的选项*/
public class TelNoteRegex {
    /*Scanner 可以在这里作为成员变量使用，但使用周期长，会一直占用内存，所以不适合在这里做成员变量
    * 在下面每个方法中 局部变量  因为局部变量会因方法的消先而消失  方法结束了局部变量也消失  内存释放*/
   // Scanner scanner = new Scanner(System.in);
    /**对于是用成员变量还是局部变量,一定要考虑内存空间与生命周期*/
    //Validate：验证，证实，确认，使生效
    //对菜单项的检验
    public int menuItemValidate(int min,int max){
        //验证菜单项的正则表达式
        String regex = "[1-9]{1}";
        //创建键盘输入对象
        Scanner scanner = new Scanner(System.in);

        //不知道输入多小次，用无限循环
        while (true){
            System.out.println("请输入正确数字，最小的是："+min+"\t最大是："+max);
            String input = scanner.nextLine();
            if(input.matches(regex)){
                //将String类型转为int 类型
                int inputNum = Integer.parseInt(input);
                if(inputNum >=min && inputNum <= max){
                    return inputNum;
                }else {
                    System.out.println("您输入的菜单项不符，请重新输入");
                }

            }else {
                System.out.println("输入数字错误，请检查");
            }
        }

    }
    //对用户输入姓名的验证
    //字母可大小写 长度是1-10之间
    public String nameValidate(){
        String regex = "[a-zA-Z]{1,10}";
        //创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入姓名，格式为：大写字母或小写字母，长度为1-10");
            String input = scanner.nextLine();
            if (input.matches(regex)){
                return input;
            }else {
                System.out.println("你当前输入的姓名有误，请重新输入");
            }
        }

    }
    //对用户输入年龄的验证
    //年龄：10-99
    public String ageValidate(){
        String regex = "[1-9]{1}[0-9]{1}";
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入10-99之间的年龄：");
            String input = scanner.nextLine();
            if(input.matches(regex)){
                return input;
            }else {
                System.out.println("您输入用户的年龄不正确，请重新输入");
            }

        }

    }
    //对用户输入性别的验证
    //性别的输入要求：男（m或M） 女（f或 F）
    public String sexValidate(){
        //对性别验证的正则表达式
        //String regex = "[mMfF]{1}";
        // | 是或  有这可读性更强
        String regex = "[m|M|f|F]{1}";
        //创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("输入性别：男（m或M） 女（f或F）");
            String input = scanner.nextLine();
            if(input.matches(regex)){
                return input;
            }else {
                System.out.println("输入性别格式有误，请重新输入");
            }
        }

    }
    //对用户输入电话号码的验证
    //电话号码：允许带有区号的座机号，允许手机号
    public String telNumValidate(){
        //对电话号码验证的正则表达式
        String regex = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";
        //创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入电话号码：可以是座机或者手机号");
            String input = scanner.nextLine();
            if(input.matches(regex)){
                return input;
            }else {
                System.out.println("请输入正确格式的电话号码，请重新输入");
            }
        }

    }
    //对用户输入地址的验证
    //地址：字母或数字，长度1-50
    public String addressValidate(){
        //对地址验证的正则表达式  如果是汉字改为大写W
        String regex = "\\w{1,50}";
        //创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入地址：格式为字母或数字，长度1-50");
            String input = scanner.nextLine();
            if(input.matches(regex)){
                return input;
            }else {
                System.out.println("你输入的地址格式有误，请重新输入");
            }
        }

    }

    public static void main(String[] args) {
        TelNoteRegex regex = new TelNoteRegex();
       /* int menuItem = regex.menuItemValidate(1,6);
        System.out.println(menuItem);*/
        /*String name = regex.nameValidate();
        System.out.println(name);*/
        /*String age = regex.ageValidate();
        System.out.println(age);*/
        /*String sex = regex.sexValidate();
        System.out.println(sex);*/
       /* String telNum = regex.telNumValidate();
        System.out.println(telNum);*/
        String address = regex.addressValidate();
        System.out.println(address);
    }

}
